(deftemplate dama 
    (slot nume)
    (slot x)
    (slot y)
    )

(foreach ?d (create$ d1 d2 d3 d4)
    (foreach ?i (create$ 1 2 3 4)
    (foreach ?j (create$ 1 2 3 4)
            (assert (dama (nume ?d)(x ?i)(y ?j)))
            )
        )
    )

(defrule rezolvare 
     
    ?d1<-(dama(nume d1)(x ?x1)(y ?y1))
     ?d2<-(dama(nume d2)(x ?x2)(y ?y2))
     ?d3<-(dama(nume d3)(x ?x3)(y ?y3))
     ?d4<-(dama(nume d4)(x ?x4)(y ?y4))
   
    
    
    (test (neq ?x1 ?x2))
    (test (neq ?x1 ?x3))
    (test (neq ?x1 ?x4))
    (test (neq ?x2 ?x3))
    (test (neq ?x2 ?x4))
    (test (neq ?x3 ?x4))
    
    
    
    (test (neq ?y1 ?y2))
    (test (neq ?y1 ?y3))
    (test (neq ?y1 ?y4))
    (test (neq ?y2 ?y3))
    (test (neq ?y2 ?y4))
    (test (neq ?y3 ?y4))
    
    
    
    (test(neq(- ?x1 ?y1) (- ?x2 ?y2)))
    (test(neq(- ?x1 ?y1) (- ?x3 ?y3)))
    (test(neq(- ?x1 ?y1) (- ?x4 ?y4)))
    (test(neq(- ?x2 ?y2) (- ?x3 ?y3)))
    (test(neq(- ?x2 ?y2) (- ?x4 ?y4)))
    (test(neq(- ?x3 ?y3) (- ?x4 ?y4)))
    
   
    
    (test(neq(+ ?x1 ?y1)(+ ?x2 ?y2)))
    (test(neq(+ ?x1 ?y1)(+ ?x3 ?y3)))
    (test(neq(+ ?x1 ?y1)(+ ?x4 ?y4)))
    (test(neq(+ ?x2 ?y2)(+ ?x3 ?y3)))
    (test(neq(+ ?x2 ?y2)(+ ?x4 ?y4)))
    (test(neq(+ ?x3 ?y3)(+ ?x4 ?y4)))
    
 
    
    =>
    (printout t "SOLUTIE*****************************" crlf)
    (printout t"d1 se afla pe pozitia  "?x1 " " ?y1 crlf)
    (printout t"d2 se afla pe pozitia  "?x2 " " ?y2 crlf)
    (printout t"d1 se afla pe pozitia  "?x3 " " ?y3 crlf)
    (printout t"d1 se afla pe pozitia  "?x4 " " ?y4 crlf)
    
    (retract ?d1 ?d2 ?d3 ?d4)
    )
(run)